#define _CRT_SECURE_NO_WARNINGS 1

#include <functional>
#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

//struct Less
//{
//    bool operator()(const pair<string, int>& kv1, const pair<string, int>& kv2)
//    {
//        return (kv1.second < kv2.second) || (kv1.second == kv2.second && kv1.first<kv2.first);
//    }
//};

//void to_lowerword(string& s)
//{
//    for (auto& e : s)
//    {
//        if (e >= 'A' && e <= 'Z')
//        {
//            e += 32;
//        }
//    }
//}
//
//int main() {
//    map<string, int> countm;
//    string tmp;
//    cin >> tmp;
//    while (tmp != ".")
//    {
//        to_lowerword(tmp);
//        countm[tmp]++;
//        cin >> tmp;
//    }
//
//    multimap<int, string, greater<int>> sortmap;
//    for (auto& e : countm)
//    {
//        sortmap.insert(make_pair(e.second, e.first));
//    }
//
//
//    //vector<pair<string, int>> v(countm.begin(), countm.end());
//
//
//    //sort(v.begin(), v.end(), Greater());
//
//    for (auto& e : sortmap)
//    {
//        cout << e.second << ":" << e.first << endl;
//    }
//}

//void RotateRight(Node* parent)
//{
//	Node* cur = parent->left;
//	Node* curright = cur->right;
//
//
//	parent->left = curright;
//	if (cur->right)
//		curright->parent = parent;
//	 
//	Node* pparent = parent->parent;
//	parent->parent = cur;
//
//	cur->right = parent;
//
//	if (pparent == NULL)
//	{
//		root = cur;
//		cur->parent = nullptr;
//	}
//	else
//	{
//		if (pparent->left == parent)
//		{
//			pparent->left = cur;
//		}
//		else
//		{
//			pparent->right = cur;
//		}
//		cur->parent = pparent;
//	}
//	cur->bf = 0;
//	parent->bf = 0;
//
//}

#include "AVLTree.h"

int main()
{
	int a[] = { 4, 2, 6, 1, 3, 5, 15, 7, 16, 14 };
	AVLTree<int, int> avl;
	for (auto e : a)
	{
		avl.Insert(make_pair(e, e));
	}

	return 0;
}